package com.cnap.db.mapper;

import com.cnap.db.entity.FileInfoPO;
import com.cnap.db.entity.PatchInfoPO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 文件mapper
 *
 * @author xc
 **/
@Mapper
@Component
public interface FileMapper {

    /**
     * 保存文件信息
     *
     * @param fileInfoPO 文件信息
     * @return 结果
     */
    int saveFileInfo(@Param("fileInfo") FileInfoPO fileInfoPO);

    /**
     * 根据id查询文件信息
     *
     * @param id id
     * @return 结果
     */
    FileInfoPO selectById(@Param("id") String id);

    /**
     * 根据id删除文件信息
     *
     * @param id id
     * @return 结果
     */
    int deleteFileInfoById(@Param("id") String id);

    /**
     * 根据id更新合并文件的MD5值
     *
     * @param id  id
     * @param md5 md5
     * @return 结果
     */
    int updateFileMd5ById(@Param("id") String id, @Param("md5") String md5);

    /**
     * 根据MD5和用户名查询
     *
     * @param md5      MD5
     * @param userName 用户名
     * @return 结果
     */
    FileInfoPO selectFileInfoByMd5AndUserName(@Param("md5") String md5, @Param("userName") String userName);

    /**
     * 保存分片信息
     *
     * @param patchInfoPO 分片信息
     * @return 结果
     */
    int savePatchInfo(@Param("patchInfo") PatchInfoPO patchInfoPO);

    /**
     * 更新分片状态
     *
     * @param id     id
     * @param status 状态
     * @return 结果
     */
    int updatePatchInfoStatus(@Param("id") String id, @Param("status") int status);

    /**
     * 更加父文件id更新分片状态
     *
     * @param parentId 父文件id
     * @param status   状态
     * @return 结果
     */
    int updatePatchInfoStatusByParentId(@Param("parentId") String parentId, @Param("status") int status);

    /**
     * 根据parentId和index查询分片信息
     *
     * @param parentId parentId
     * @param index    索引
     * @return 分片信息
     */
    PatchInfoPO selectByParentIdAndIndex(@Param("parentId") String parentId, @Param("index") int index);

    /**
     * 根据parentId查询
     *
     * @param parentId parentId
     * @return 分片结果列表
     */
    List<PatchInfoPO> selectByParentId(@Param("parentId") String parentId);

    /**
     * 根据parentId删除
     *
     * @param parentId parentId
     * @return 结果
     */
    int deletePatchByParentId(@Param("parentId") String parentId);

    /**
     * 根据id删除分片信息
     *
     * @param id id
     * @return 结果
     */
    int deletePatchById(@Param("id") String id);

}
